/***************************************************************************
 * This document contains confidential and proprietary information
 * subject to non-disclosure agreements with AsiaInspection. This
 * information shall not be distributed or copied without written
 * permission from the AsiaInspection.
 ***************************************************************************/
package networks.soap;

/***************************************************************************
 *<PRE>
 *  Project Name    : AINPMW
 *
 *  Package Name    : com.metro.services
 *
 *  File Name       : PostSOAP.java
 *
 *  Creation Date   : Mar 17, 2016
 *
 *  Author          : Allen Zhang
 *
 *  Purpose         : TODO
 *
 *
 *  History         : TODO
 *
 *</PRE>
 ***************************************************************************/
/*
 * $HeadURL$
 * $Revision$
 * $Date$
 * ====================================================================
 *
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation.  For more
 * information on the Apache Software Foundation, please see
 * <http://www.apache.org/>.
 */

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.util.zip.GZIPInputStream;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.FileRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;

/**
 *
 * This is a sample application that demonstrates
 * how to use the Jakarta HttpClient API.
 *
 * This application sends an XML document
 * to a remote web server using HTTP POST
 *
 * @author Sean C. Sullivan
 * @author Ortwin Glueck
 * @author Oleg Kalnichevski
 * @author Paul King
 */
public class PostSOAP {

	/**
	 *
	 * Usage:
	 *          java PostSOAP http://mywebserver:80/ SOAPAction c:\foo.xml
	 *
	 *  @param args command line arguments
	 *                 Argument 0 is a URL to a web server
	 *                 Argument 1 is the SOAP Action
	 *                 Argument 2 is a local filename
	 *
	 */
	public static void main(String[] args) throws Exception {
		String strURL = "https://pp-supplychain.metro-link.com.hk:443/NewIMSWS/services/InspectionService.InspectionServiceHttpSoap11Endpoint/";
		// Get SOAP action
		String strSoapAction = "SOAPAction";
		// Get file to be posted
		String strXMLFilename = "D:\\test.xml";
		File input = new File(strXMLFilename);
		// Prepare HTTP post
		PostMethod post = new PostMethod(strURL);
		// Request content will be retrieved directly
		// from the input stream
		RequestEntity entity = new FileRequestEntity(input, "text/xml; charset=UTF-8");
		post.setRequestEntity(entity);
		// consult documentation for your web service
		post.setRequestHeader("SOAPAction", strSoapAction);
		// Get HTTP client
		HttpClient httpclient = new HttpClient();
		// Execute request
		try {
			int result = httpclient.executeMethod(post);
			// Display status code
			System.out.println("Response status code: " + result);
			// Display response
			System.out.println("Response body: ");
//			System.out.println(post.getResponseBodyAsString());

			String bookingSoap = "";
			BufferedReader in = null;
			in = new BufferedReader(new InputStreamReader(new GZIPInputStream(post.getResponseBodyAsStream())));
			String inputLine;
			int ss = 0;
			while ((inputLine = in.readLine()) != null) {
				if (ss > 1) break;
				System.out.println("\n--------\n" + inputLine);
				bookingSoap += inputLine;
				ss++;
			}
			in.close();
			System.out.println(bookingSoap);
		} finally {
			// Release current connection to the connection pool once you are done
			post.releaseConnection();
		}

	}
}
